home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr05 / xnot12a.zip / MACRO.C < prev    next >
C/C++ Source or Header  |  1993-05-20  |  2KB  |  96 lines

  1. #include "jam.h"
  2. #include"stdlib.h"
  3.  
  4. /* keyboard macros for MicroGnuEmacs 1x */
  5.  
  6. #include "def.h"
  7. #include "key.h"
  8.  
  9. #define EXTERN        /* causes def of data to be in this file! */
  10. #define INIT(i) = (i)
  11.  
  12. #include "macro.h"
  13.  
  14. /*ARGSUSED*/
  15. definemacro(f, n)
  16. int    f, n;
  17. {
  18.     register LINE *lp1;
  19.     LINE *lp2;
  20.  
  21.     macrocount = 0;
  22.     if(macrodef) 
  23.          {
  24.         ewprintf("Already defining macro!");
  25.         return macrodef = FALSE;
  26.      }
  27.  
  28.     if (maclhead != NULL) 
  29.           {
  30.             for(lp1 = lforw(maclhead); lp1 != maclhead; lp1 = lp2) 
  31.               {
  32.                 lp2 = lforw(lp1);
  33.                 free((char *)lp1);
  34.               }
  35.             free((char *)lp1);
  36.           }
  37.  
  38.     if((maclhead = lp1 = lalloc(0)) == NULL) 
  39.           return FALSE;
  40.     ewprintf("Defining Keyboard Macro...");
  41.     maclcur = lp1->l_fp = lp1->l_bp = lp1;
  42.     return macrodef = TRUE;
  43. }
  44.  
  45. /*ARGSUSED*/
  46. finishmacro(f, n)
  47. int    f, n;
  48. {
  49.     macrodef = FALSE;
  50.     ewprintf("End Keyboard Macro Definition.");
  51.     return TRUE;
  52. }
  53.  
  54. /*ARGSUSED*/
  55. executemacro(f, n)
  56. int    f, n;
  57. {
  58.     int    i, j;
  59.     PF    funct;
  60.     int    universal_argument();
  61.     int    flag, num;
  62.  
  63.     if(macrodef ||
  64.      (macrocount >= MAXMACRO && macro[MAXMACRO].m_funct != finishmacro))
  65.       return FALSE;
  66.  
  67.     if(macrocount == 0) 
  68.       return TRUE;
  69.  
  70.     inmacro = TRUE;
  71.  
  72.     for(i = n; i > 0; i--) {
  73.     maclcur = maclhead->l_fp;
  74.     flag = 0;
  75.     num = 1;
  76.     for(j = 0; j < macrocount-1; j++) {
  77.         funct = macro[j].m_funct;
  78.         if(funct == universal_argument) {
  79.         flag = FFARG;
  80.         num = macro[++j].m_count;
  81.         continue;
  82.         }
  83.         if((*funct)(flag, num) != TRUE) {
  84.         inmacro = FALSE;
  85.         return FALSE;
  86.         }
  87.         lastflag = thisflag;
  88.         thisflag = 0;
  89.         flag = 0; 
  90.         num = 1;
  91.     }
  92.     }
  93.     inmacro = FALSE;
  94.     return TRUE;
  95. }
  96.